package com.ibeeking.found.open.b.rest.service;

import com.ibeeking.found.common.entity.open.OpenAuthDTO;
import com.ibeeking.found.open.service.common.param.QueryOpenAuthInfoParam;
import com.ibeeking.found.open.service.common.param.WxUserInfoEncryptedParam;
import com.ibeeking.found.open.service.common.vo.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * @ClassName IWxOpenEventService
 * @Description
 * @Author ibeeking
 * @Date 2021-06-18 12:21
 **/

public interface IWxOpenEventService {
     /**
     * 开放平台接收凭据ticket事件
     *
     * @param componentAppId        开放平台第三方应用componentAppId
     * @param data         加密数据
     * @param timestamp    时间戳
     * @param nonce        随机字符串
     * @param signature    签名
     * @param encType      加密类型
     * @param msgSignature msg
     * @return
     */
    String authTicket(String componentAppId, String data, String timestamp, String nonce, String signature, String encType, String msgSignature);

    /**
     * 开放平台消息事件
     *
     * @param componentAppId        开放平台第三方应用componentAppId
     * @param openid       开放平台openId
     * @param data         加密数据
     * @param timestamp    时间戳
     * @param nonce        随机字符串
     * @param signature    签名
     * @param encType      加密类型
     * @param msgSignature msg
     * @return
     */
    Object msgEvent(String componentAppId, String openid, String data, String timestamp, String nonce, String signature, String encType, String msgSignature, HttpServletResponse httpServletResponse);

    /**
     * 获取授权注册页面扫码授权url   显示二维码
     *
     * @param request
     * @return
     * @throws Exception
     * @Author ibeeking
     */
    UrlVO getPreAuthUrl(HttpServletRequest request, Integer type) throws Exception;

//    String toPreAuthUrl(HttpServletRequest request, Integer type) throws Exception;
//
//    /**
//     * @param authorizationCode 这边可以直接 重定向自己前台的页面   也可判断权限是否全部勾选完成  授权完成后把授权小程序的信息保存好
//     * @return
//     * @Author ibeeking
//     * 授权成功回调链接
//     */
//    Object jump(String authorizationCode);

    OpenAuthVO queryOrUpdateOpenAuthInfo(QueryOpenAuthInfoParam param) throws Exception;

    /**
     * @param appId 微信公众平台的APPID
     * @return
     * @Author ibeeking
     * 通过微信接口返回授权列表信息
     */
//    Object getAuthorizerInfo(String appId);
    /**
     * @param appType 微信公众平台的APPID
     * @return
     * @Author ibeeking
     * 通过微信接口返回授权列表信息
     */
    OpenAuthDTO queryOpenAuthByTenantIdAndType(Long tenantId,  Integer configType,  Integer configSubType, Integer appType);
    /**
     * @param appId 微信公众平台的APPID
     * @return
     * @Author ibeeking
     * 返回授权列表信息
     */
    List<WxOpenAuthFuncVO> queryWxOpenAuthFuncList(String appId);

    /**
     * @param
     * @return
     * @Author ibeeking
     *
     */
    OpenAuthViewVO queryOpenAuthViewByAllType(Long tenantId, Integer configType, Integer configSubType, Integer AppType);

    /**
     * 解密微信登录用户加密信息
     * @param param
     * @return
     * @Author ibeeking
     *
     */
    WxUserInfoDecryptedVO decryptWxUserInfo(WxUserInfoEncryptedParam param);

}
